import ApiClient from '@/api/apiClient';

import type { RequestBody } from 'alova';

/**
 * 规则配置内容接口
 */
export interface RuleConfigContent {
  /**
   * 主键ID
   */
  id?: number;
  /**
   * 完全匹配模式：0-满足任意条件执行，1-满足全部条件执行
   */
  perfectMatchMode?: number;
  /**
   * 静默时间（秒）
   */
  silencePeriod?: string;
  /**
   * 触发条件列表
   */
  conditions?: Array<{
    /**
     * 条件ID
     */
    id?: number;
    /**
     * 产品编码
     */
    productCode?: string;
    /**
     * 条件类型
     */
    conditionType?: string;
    /**
     * 条件内容
     */
    conditionContent?: string;
  }>;
  /**
   * 动作执行模式：serial-串行，parallel-并行
   */
  actionExecutionMode?: string;
  /**
   * 动作列表
   */
  actions?: Array<{
    /**
     * 动作类型名称
     */
    actionTypeName?: string;
    /**
     * 执行顺序
     */
    orderIndex?: number;
    /**
     * 参数
     */
    param?: any;
  }>;
  [property: string]: any;
}

/**
 * 获取规则配置内容
 * @param id 规则ID
 */
export const getRulesContentApi = (id: number | string) => {
  return ApiClient.Get<RuleConfigContent>(`/manager/rule/configure/get/${id}`, {
    meta: { auth: true },
  });
};

/**
 * 编辑规则配置内容
 * @param data 规则配置数据
 */
export const editRulesContentApi = (data: RequestBody) => {
  return ApiClient.Post('/manager/rule/configure/saveOrUpdate', data, {
    meta: { auth: true },
  });
};

/**
 * 新增动作规则
 * @param data 动作规则数据
 */
export const newActionRuleApi = (data: RequestBody) => {
  return ApiClient.Post('/manager/rule/configure/action/saveOrUpdate', data, {
    meta: { auth: true },
  });
};

/**
 * 告警记录统计数据接口
 */
export interface AlarmStatisticInfo {
  /**
   * 统计数据
   */
  [property: string]: any;
}

/**
 * 告警记录信息接口
 */
export interface AlarmRecordInfo {
  /**
   * 主键ID
   */
  id?: number;
  /**
   * 告警开始时间
   */
  alarmStartTime?: string;
  /**
   * 告警结束时间
   */
  alarmEndTime?: string;
  /**
   * 告警状态
   */
  status?: number;
  /**
   * 告警级别
   */
  level?: number;
  /**
   * 处理开始时间
   */
  handleStartTime?: string;
  /**
   * 处理结束时间
   */
  handleEndTime?: string;
  [property: string]: unknown;
}

/**
 * 获取告警数据统计
 */
export const getWarningStatisticApi = () => {
  return ApiClient.Get<AlarmStatisticInfo>('/manager/alarm/record/alarmCount', {
    meta: { auth: true },
  });
};

/**
 * 获取告警记录列表
 * @param data 查询参数
 */
export const getWarningListApi = (data: RequestBody) => {
  return ApiClient.Post<API.ListType<AlarmRecordInfo>>('/manager/alarm/record/page', data, {
    meta: { auth: true },
  });
};

/**
 * 处理告警记录
 * @param data 处理数据
 */
export const resoluteAlarmApi = (data: RequestBody) => {
  return ApiClient.Post('/manager/alarm/record/handleAlarm', data, {
    meta: { auth: true },
  });
};
